package com.sunyzc.ebaotech.ybt.simulator.util;

/** 单证号码生成器 */
public class CodeUtil {
	public static void main(String[] args) {
		long serialNo = 1123123117;
		System.out.println(serialNo + " -> " + generateCommonCode(serialNo, "070")); // 网销（官网）投保单
		System.out.println(serialNo + " -> " + generateCommonCode(serialNo, "092")); // 网销（官网）业务保单
		System.out.println(serialNo + " -> " + generateCommonCode(serialNo, "005")); // 银保业务专用投保单
		System.out.println(serialNo + " -> " + generateCommonCode(serialNo, "061")); // 银保业务投保单(简易)
		System.out.println(serialNo + " -> " + generateCommonCode(serialNo, "088")); // 个银险保单
	}

	/**
	 * 生成通用单证编码 <br>
	 * 保单单证代码(个险保单号-088、团险保单号-050)，版本08 <br>
	 * 投保单单证代码(个险投保单号-001、银代投保单号-005)，版本01 <br>
	 */
	public static String generateCommonCode(long serialNo, String codeTypeStr) {
		int codeType = Integer.parseInt(codeTypeStr, 10);
		int codeVersion = 0;
		if ("088".equals(codeTypeStr) || "88".equals(codeTypeStr) || "050".equals(codeTypeStr) || "50".equals(codeTypeStr))
			codeVersion = Integer.parseInt("08", 10);
		else
			codeVersion = Integer.parseInt("01", 10);
		long checkCode = ((serialNo % 97) * 1000 + codeType * 100 + codeVersion * 100000) % 97; // 校验码
		return String.format("%010d", serialNo) + String.format("%02d", checkCode) + String.format("%02d", codeVersion) + String.format("%03d", codeType);
	}

	public static String generateCommonCode(String serialNo, String codeTypeStr) {
		return generateCommonCode(Long.parseLong(serialNo, 10), codeTypeStr);
	}
}
